#ifndef __M_UTIL_H__
#define __M_UTIL_H__

#include <iostream>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>

/*
  获取系统时间
  判断⽂件是否存在
  获取⽂件的所在⽬录路径
  创建⽬录
*/

namespace log
{
    namespace Util
    {
        class Data
        {
        public:
            static size_t GetTime() { return (size_t)time(nullptr); } // 获取系统时间
        };

        class File
        {
        public:
            static bool IsExist(const std::string &FileName) // 判断文件是否存在
            {
                struct stat st;
                return stat(FileName.c_str(), &st) == 0; // 存在就返回0，stat可以在不同操作系统下运行
            }
            static std::string GetDictory(const std::string &name) //  获取⽂件的所在⽬录路径
            {
                // ./abc/ab/a
                if(name.empty()) {return ".";}
                size_t pos = name.find_last_of("/\\"); // Linux下分隔符是/,windows下分隔符是\,\\第一个\是让第二个\不要被识别成转义字符
                if(pos == std::string::npos) {return ".";}
                std::string path = name.substr(0, pos + 1);
                return path;
            }
            static void Create_Dictory(const std::string &PathName) // 创建⽬录
            {
                // ./abc/ab/a
                if(PathName.empty()) {return;}
                if(IsExist(PathName)) {return;}
                size_t pos = 0, idx = 0;
                while (idx < PathName.size())
                {
                    pos = PathName.find_first_of("/\\", idx);
                    if (pos == std::string::npos)
                    {
                        mkdir(PathName.c_str(), 0777);
                        break;
                    }
                    std::string path = PathName.substr(0, pos); // 连/也切进去
                    if (path == "." || path == "..")
                    {
                        idx = pos + 1;
                        continue;
                    }
                    if (IsExist(path))
                    {
                        idx = pos + 1;
                    }
                    mkdir(path.c_str(), 0777);
                    idx = pos + 1;
                }
            }
        };
    }
}

#endif